package com.xj.algorithm.leetcode;

/**
 * 检测大写字母
 */
public class L520_检查单词的大写字母的用法是否正确 {

    /**
     * 给定一个单词，你需要判断单词的大写使用是否正确。
     * <p>
     * 我们定义，在以下情况时，单词的大写用法是正确的：
     * <p>
     * 全部字母都是大写，比如"USA"。
     * 单词中所有字母都不是大写，比如"leetcode"。
     * 如果单词不只含有一个字母，只有首字母大写， 比如 "Google"。
     * 否则，我们定义这个单词没有正确使用大写字母。
     * <p>
     * 示例 1:
     * <p>
     * 输入: "USA"
     * 输出: True
     * 示例 2:
     * <p>
     * 输入: "FlaG"
     * 输出: False
     * 注意: 输入是由大写和小写拉丁字母组成的非空单词。
     */
    public static void main(String[] args) {
        System.out.println(detectCapitalUse("USA"));
        System.out.println(detectCapitalUse("FlaG"));
        System.out.println(detectCapitalUse("Hello"));
        System.out.println(detectCapitalUse("a"));
        System.out.println(detectCapitalUse("A"));

        System.out.println(detectCapitalUseGood("USA"));
        System.out.println(detectCapitalUseGood("FlaG"));
        System.out.println(detectCapitalUseGood("Hello"));
        System.out.println(detectCapitalUseGood("a"));
        System.out.println(detectCapitalUseGood("A"));
    }

    //自己的解法：正则表达式
    public static boolean detectCapitalUse(String word) {
        if (word.matches("[A-Z]+")) return true;
        if (word.matches("[a-z]+")) return true;
        if (word.matches("[A-Z]{1}[a-z]+")) return true;
        return false;
    }

    //精彩解法：使用库函数
    public static boolean detectCapitalUseGood(String word) {
        return word.equals(word.toLowerCase())
                || word.equals(word.toUpperCase())
                || word.equals(Character.toUpperCase(word.charAt(0)) + word.substring(1).toLowerCase());
    }


}
